home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr47 / 80x0393.zip / IRQVECT.ASM < prev    next >
Assembly Source File  |  1993-06-20  |  4KB  |  137 lines

  1. comment *
  2.    IRQVECT.ASM
  3.  
  4.    Purpose:
  5.    Demonstration of use of the VCPI function 0DE0Ah, which tells
  6.    you which vectors the 8259 PIC is mapping IRQs to.
  7.  
  8.    Author:
  9.    Yousuf Khan, released to the public domain
  10.  
  11.    To run IRQVECT you have link it with EXTFILE.ASM !
  12.    (i.e. tlink /t irqvect+extfile for Borland)
  13. *
  14.  
  15.         .model tiny
  16.         .data
  17.         no_vcpi         db      "VCPI driver not found",13,10,"$"
  18.         success         db      "Successful query of VCPI IRQ mappings"
  19.                         db      13,10,"Master PIC: "
  20.         master_vect     db      3 dup(20h),"d",13,10,"Slave PIC: "
  21.         slave_vect      db      3 dup(20h),"d",13,10,"$"
  22.         no_slave        db      "none"
  23.         failure         db      "Couldn't get VCPI IRQ mappings",13,10,"$"
  24.  
  25.         .code
  26.  
  27. extrn   vcpi_detect:near        ;custom external module
  28.         org     100h
  29.  
  30. start:
  31.         call    vcpi_detect     ;Is VCPI host installed?
  32.         cmp     ax, 0
  33.         je      vcpi_present    ;if AX=0, then VCPI present
  34.         lea     dx, no_vcpi     ;print message that VCPI
  35.         mov     ah, 9           ; host is not present
  36.         int     21h
  37.         jmp     short eop
  38.  
  39. vcpi_present:
  40.         mov     ax, 0DE0Ah      ;VCPI Get 8259 state function
  41.         int     67h
  42.         cmp     ah, 0
  43.         jne     short failed    ;function failed if AH<>0
  44.         ;
  45.         ;Ascii'ize master PIC's vector
  46.         ;
  47.         mov     al, bl          ;use master PIC's vector as errorlevel
  48.         push    ax
  49.         mov     di, offset master_vect
  50.         call    ascii_convert   ;Ascii'ize master PIC's vector
  51.         ;
  52.         ;determine if slave 8259 PIC exists
  53.         ;
  54.         mov     ah, 0c0h
  55.         int     15h
  56.         ;If CF set, then Int 15h, AH=C0h not supported by machine
  57.         ;must be an old XT
  58.         jnc     short supported ;is function supported? yes
  59.         call    print_none
  60.         pop     ax
  61.         jmp     short display_string
  62.  
  63. supported:
  64.         mov     al, es:[bx]     ;read feature byte #1 into AL
  65.         test    al, 01000000b   ;if bit 6 set then slave PIC present
  66.         je      short slave_present
  67.         call    print_none
  68.         jmp     short display_string
  69.  
  70. slave_present:
  71.         ;
  72.         ;Ascii'ize slave PIC's vector
  73.         ;
  74.         xor     ax, ax          ;zero AX
  75.         mov     al, cl
  76.         mov     di, offset slave_vect
  77.         call    ascii_convert   ;Ascii'ize slave PIC's vector
  78.  
  79. display_string:
  80.         mov     dx, offset success
  81.         mov     ah, 9
  82.         int     21h
  83.         pop     ax
  84.         jmp     short eop
  85.  
  86. failed:
  87.         mov     dx, offset failure
  88.         mov     ah, 9
  89.         int     21h
  90.         mov     al, 0
  91.  
  92. eop:
  93.         mov     ah, 4ch
  94.         int     21h
  95.  
  96. ascii_convert   proc
  97. ;
  98. ;       -Put byte to be converted into AL
  99. ;       -Point DI to start of location to store ascii'ized AL value
  100. ;
  101.         push    bx
  102.         mov     bl, 100d
  103.         div     bl              ;divide by 100
  104.         mov     bl, al
  105.         add     bl, 30h         ;convert to ascii
  106.         mov     [di], bl        ;store ascii
  107.         xchg    ah, al          ;work on remainder
  108.         xor     ah, ah          ;zero upper byte
  109.         mov     bl, 10d
  110.         div     bl              ;divide by 10
  111.         mov     bl, al
  112.         add     bl, 30h
  113.         mov     [di][1], bl
  114.         xchg    bl, ah          ;store remainder directly into BL
  115.         add     bl, 30h
  116.         mov     [di][2], bl
  117.         pop     bx
  118.         ret
  119.         endp
  120.  
  121. print_none      proc
  122. ;
  123. ; puts the word "none" right after slave PIC status
  124. ;
  125.         mov     ax, ds
  126.         mov     es, ax          ;make sure ES = DS
  127.         lea     si, no_slave    ;source of MOVSW
  128.         lea     di, slave_vect  ;destination of MOVSW
  129.         mov     cx, 2
  130.         rep movsw
  131.         ret
  132.         endp
  133.  
  134.         end     start
  135.  
  136. ; EOF IRQVECT.ASM
  137.